class Solution {
public:
    bool wordPattern(string pattern, string s) {
        // vector<string> strs;
        stringstream ss(s);
        string str;
        unordered_map<char, string> hash1;
        unordered_map<string, char> hash2;

        for(char &ch : pattern)
        {
            // !(ss >> str)表示 s 中单词先没了，而 pattern 中还有字符
            if(!(ss >> str) || (hash1.count(ch) == 1 && hash1[ch] != str) || (hash2.count(str) == 1 && hash2[str] != ch))
                return false;
            hash1[ch] = str;
            hash2[str] = ch;
        }

        // 最后需要判断 s 中是否剩余单词，剩余的话说明 pattern 先结束了
        return (ss >> s) ? false : true;



        // string temp;
        // while(iss >> temp)
        //     strs.push_back(temp);
        // for(auto &str : strs)
        //     cout << str << " ";
        // cout << endl;
        return true;
    }
};